package com.javaweb.blogcite.service.Impl;

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.javaweb.blogcite.controller.vo.BlogTypeView;
import com.javaweb.blogcite.mapper.BlogMapper;
import com.javaweb.blogcite.mapper.BlogTypeMapper;
import com.javaweb.blogcite.pojo.Blog;
import com.javaweb.blogcite.pojo.BlogType;
import com.javaweb.blogcite.service.BlogTypeService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

@Service
public class BlogTypeServiceImpl implements BlogTypeService {
    @Resource
    private BlogMapper blogMapper;

    @Resource
    private BlogTypeMapper blogTypeMapper;

    @Override
    public BlogTypeView getBlogTypeById(Integer id) {
        BlogType blogType = blogTypeMapper.selectCategoryById(id);
        return new BlogTypeView(blogType);
    }

    public boolean deleteBlogTypeById(Integer id){
        // 将输入当前分类的 blog 的 category_id 设置为 -1
        blogMapper.update(null, new UpdateWrapper<Blog>().eq("category_id", id).set("category_id", -1));

        // 调用删除方法，返回受影响的行数
        int rowsAffected = blogTypeMapper.deleteById(id);

        // 判断是否删除成功
        if (rowsAffected > 0) {
            // 如果删除成功，返回一个指示成功的对象（可以构造一个新的BlogType对象表示成功）
            return true;  // 假设构造函数中接受消息和状态
        } else {
            // 如果删除失败，返回一个指示失败的对象
            return false;  // 假设构造函数中接受消息和状态
        }
    }


    public List<BlogTypeView> getBlogTypeByOrder() {
        List<BlogType> blogTypes = blogTypeMapper.selectCategoryByOrder();
        // 将 BlogType 转换为 BlogTypeView
        List<BlogTypeView> blogTypeViewList = new ArrayList<>();
        for (BlogType blogType : blogTypes) {
            BlogTypeView blogTypeView = new BlogTypeView(blogType);
            blogTypeViewList.add(blogTypeView);
        }
        return blogTypeViewList;
    }

    @Override
    public boolean addBlogType(BlogTypeView requestBody) {
        BlogType blogType = new BlogType();
        blogType.setName(requestBody.getName());
        blogType.setOrder(requestBody.getOrder());
        // 设置博客类型默认博客数量为 0
        blogType.setBlogCount(0);
        int rows = blogTypeMapper.insertBlogType(blogType);
        return rows > 0;
    }

    @Override
    public boolean updateBlogType(BlogTypeView requestBody) {
        BlogType blogType = new BlogType();
        blogType.setId(requestBody.getId());
        blogType.setOrder(requestBody.getOrder());
        blogType.setName(requestBody.getName());
        blogType.setBlogCount(requestBody.getArticleCount());
        int rows = blogTypeMapper.updateBlogType(blogType);
        return rows > 0;
    }
}
